package com.partsoft.dits;

/**
 * 描述符注册表
 * @param <E> 实现{@link EdgeDescriptor}接口
 */
public interface DescriptorRegistry<E extends EdgeDescriptor> {
	
	/**
	 * 支持的描述符类
	 */
	Class<E> getSupportClass();

	/**
	 * 获得所有的描述符
	 */
	E[] getDescriptors();
	
	/**
	 * 获得所有的描述符
	 */
	E[] getDescriptors(DescriptorAccepter<E> accepter);

	
	/**
	 * 是否有此描述符
	 */
	boolean hasDescriptor(E descriptor);
	
	/**
	 * 获得描述符实例
	 */
	E getDescriptor(E descriptor);
	
	/**
	 * 描述符个数
	 * @return
	 */
	int countDescriptor();
	
	/**
	 * 描述符个数
	 * @return
	 */
	int countDescriptor(DescriptorAccepter<E> accepter);
	
	/**
	 * 根据描述符ID获取描述符
	 * @return
	 * @exception RuntimeException 如果找不到则抛出异常
	 */
	E getDescriptor(String id) throws RuntimeException;

	/**
	 * 判断指定ID的描述符是否存在
	 * @param id 描述符ID
	 */
	boolean hasDescriptor(String id);	
	
}
